// Switch_NI_2527.cpp : Defines the initialization routines for the DLL.
//

#include "stdafx.h"
#include "Switch_NI_2527.h"
#include "FactorySwitchNI2527.h"
#include "Registry.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//
//	Note!
//
//		If this DLL is dynamically linked against the MFC
//		DLLs, any functions exported from this DLL which
//		call into MFC must have the AFX_MANAGE_STATE macro
//		added at the very beginning of the function.
//
//		For example:
//
//		extern "C" BOOL PASCAL EXPORT ExportedFunction()
//		{
//			AFX_MANAGE_STATE(AfxGetStaticModuleState());
//			// normal function body here
//		}
//
//		It is very important that this macro appear in each
//		function, prior to any calls into MFC.  This means that
//		it must appear as the first statement within the 
//		function, even before any object variable declarations
//		as their constructors may generate calls into the MFC
//		DLL.
//
//		Please see MFC Technical Notes 33 and 58 for additional
//		details.
//

/////////////////////////////////////////////////////////////////////////////
// CSwitch_NI_2527App

BEGIN_MESSAGE_MAP(CSwitch_NI_2527App, CWinApp)
	//{{AFX_MSG_MAP(CSwitch_NI_2527App)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

 
/////////////////////////////////////////////////////////////////////////////
// CSwitch_NI_2527App construction


// {8A2CA80A-2141-4adf-8653-1049E4DDED81}
extern "C" const GUID CLSID_SWITCH_NI_2527;


CSwitch_NI_2527App::CSwitch_NI_2527App()
{

}

/////////////////////////////////////////////////////////////////////////////
// The one and only CSwitch_NI_2527App object


CSwitch_NI_2527App theApp;

/////////////////////////////////////////////////////////////////////////////
// Special entry points required for inproc servers

/*
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	return AfxDllGetClassObject(rclsid, riid, ppv);
}

STDAPI DllCanUnloadNow(void)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	return AfxDllCanUnloadNow();
}
*/
// by exporting DllRegisterServer, you can use regsvr.exe
//STDAPI DllRegisterServer(void)
//{
//	AFX_MANAGE_STATE(AfxGetStaticModuleState());
//	COleObjectFactory::UpdateRegistryAll();
//	return S_OK;


STDAPI DllCanUnloadNow(void)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	return AfxDllCanUnloadNow();
}

STDAPI DllGetClassObject(const CLSID& clsid, const IID& iid, void **ppv)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	if (clsid == CLSID_SWITCH_NI_2527 ) {
		
		CFactorySwitchNI2527 *pFactory = new CFactorySwitchNI2527;
		
		if (pFactory == NULL) {
			return E_OUTOFMEMORY ;
		}
		
		HRESULT result = pFactory->QueryInterface(iid, ppv);
		
		return result;
	} else {
		return CLASS_E_CLASSNOTAVAILABLE;
	}
}


STDAPI DllRegisterServer()
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	char szModule[1024] ;//= "D:\\501\\CODE\\srcc\\Switch_NI_2527\\Debug\\Switch_NI_2527.dll";
	DWORD dwResult = ::GetModuleFileName(theApp.m_hInstance, szModule, 1024);
	if (dwResult == 0)
		return SELFREG_E_CLASS;
	return RegisterServer(CLSID_SWITCH_NI_2527,
						  szModule, 
						  "NISWITCH.2527",
						  "SWITCH Component",
						  NULL);

}/**/


//
// Server unregistration
STDAPI DllUnregisterServer()
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	return UnregisterServer(CLSID_SWITCH_NI_2527,
		"SWITCH_NI_2527",NULL);
}
